package com.ingenio.siot.adapter;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import com.ingenio.siot.Adapter;
import com.ingenio.siot.entity.Altura;
import com.ingenio.siot.entity.Calle;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;

public class AlturaAdapter extends Adapter{
	
	public Altura devolverAltura(Integer idAltura) throws Exception{
		Connection conn = null;
		PreparedStatement stmt = null;
		Altura a = null;
		CalleAdapter ca = new CalleAdapter();
    	try {
    		conn = (Connection) abrirConexion();
    		String query ="SELECT * FROM alturas WHERE IdAltura = ?";
    		stmt = (PreparedStatement) conn.prepareStatement(query);
    		stmt.setInt(1, idAltura);
    		ResultSet result = stmt.executeQuery();
    		if(result.next()){
    			Integer idCalle = result.getInt("IdCalle");
    			Calle c = ca.devolverCalle(idCalle);
    			String nroAltura = result.getString("nroAltura");
    			Double latitud = result.getDouble("latitud");
    			Double longitud = result.getDouble("longitud");
    			/* Completar Altura, Linea, Transito con sus adapters*/
    			a = new Altura(idAltura, nroAltura, latitud, longitud, c);
    		}
    	}
    	catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		//conn.close();
    		cerrarConexion(conn);
    	}
		return a;
	}
	
	public Altura devolverAlturaDibujo(Integer idAltura) throws Exception{
		Connection conn = null;
		PreparedStatement stmt = null;
		Altura a = null;
		CalleAdapter ca = new CalleAdapter();
    	try {
    		conn = (Connection) abrirConexion();
    		String query ="SELECT * FROM alturasdibujo WHERE IdAltura = ?";
    		stmt = (PreparedStatement) conn.prepareStatement(query);
    		stmt.setInt(1, idAltura);
    		ResultSet result = stmt.executeQuery();
    		if(result.next()){
    			Integer idCalle = result.getInt("IdCalle");
    			Calle c = ca.devolverCalle(idCalle);
    			String nroAltura = result.getString("nroAltura");
    			Double latitud = result.getDouble("latitud");
    			Double longitud = result.getDouble("longitud");
    			/* Completar Altura, Linea, Transito con sus adapters*/
    			a = new Altura(idAltura, nroAltura, latitud, longitud, c);
    		}
    	}
    	catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		//conn.close();
    		cerrarConexion(conn);
    	}
		return a;
	}
	
	public List<Altura> devolverAlturaInicioFin(Integer idAlturaIni, Integer idAlturaFin) throws Exception{
		Connection conn = null;
		PreparedStatement stmt = null;
		Altura a = null;
		CalleAdapter ca = new CalleAdapter();
		List<Altura> alturas = new ArrayList<Altura>();
    	try {
    		conn = (Connection) abrirConexion();
    		String query ="SELECT * FROM alturas WHERE IdAltura IN (?,?)";
    		stmt = (PreparedStatement) conn.prepareStatement(query);
    		stmt.setInt(1, idAlturaIni);
    		stmt.setInt(2, idAlturaFin);
    		ResultSet result = stmt.executeQuery();
    		while(result.next()){
    			Integer idAltura = result.getInt("IdAltura");
    			Integer idCalle = result.getInt("IdCalle");
    			Calle c = ca.devolverCalle(idCalle);
    			String nroAltura = result.getString("nroAltura");
    			Double latitud = result.getDouble("latitud");
    			Double longitud = result.getDouble("longitud");
    			a = new Altura(idAltura, nroAltura, latitud, longitud, c);
    			alturas.add(a);
    		}
    	}
    	catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		//conn.close();
    		cerrarConexion(conn);
    	}
		return alturas;
	}
	
	public List<Altura> devolverAlturaInicioFinDibujo(Integer idAlturaIni, Integer idAlturaFin) throws Exception{
		Connection conn = null;
		PreparedStatement stmt = null;
		Altura a = null;
		CalleAdapter ca = new CalleAdapter();
		List<Altura> alturas = new ArrayList<Altura>();
    	try {
    		conn = (Connection) abrirConexion();
    		String query ="SELECT * FROM alturasdibujo WHERE IdAltura IN (?,?)";
    		stmt = (PreparedStatement) conn.prepareStatement(query);
    		stmt.setInt(1, idAlturaIni);
    		stmt.setInt(2, idAlturaFin);
    		ResultSet result = stmt.executeQuery();
    		while(result.next()){
    			Integer idAltura = result.getInt("IdAltura");
    			Integer idCalle = result.getInt("IdCalle");
    			Calle c = ca.devolverCalle(idCalle);
    			String nroAltura = result.getString("nroAltura");
    			Double latitud = result.getDouble("latitud");
    			Double longitud = result.getDouble("longitud");
    			a = new Altura(idAltura, nroAltura, latitud, longitud, c);
    			alturas.add(a);
    		}
    	}
    	catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		//conn.close();
    		cerrarConexion(conn);
    	}
		return alturas;
	}
	
	public List<Altura> devolverAlturasCalle(Calle c) throws Exception{
		Connection conn = null;
		PreparedStatement stmt = null;
		Altura a = null;
		List<Altura> alturas = new ArrayList<Altura>();
		try{
			conn = (Connection) abrirConexion();
			String query = "SELECT * FROM alturasDibujo WHERE IdCalle = ?";
			stmt = (PreparedStatement) conn.prepareStatement(query);
			stmt.setInt(1, c.getIdCalle());
			ResultSet result = stmt.executeQuery();
			while(result.next()){
				Integer id = result.getInt("IdAltura");
				String nroAlt = result.getString("nroAltura");
				Double lat = result.getDouble("latitud");
				Double lng = result.getDouble("longitud");
				a = new Altura(id, nroAlt, lat, lng, c);
				
				alturas.add(a);
			}
		}
		catch (Exception e){
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos", e);
		}
		finally{
			cerrarConexion(conn);
		}
		return alturas;
	}
}
